SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
-- =============================================
-- Author:		ovalente
-- Create date: oct-2012
-- Description:	Dado un artículo y una lista de precios, retorna el precio con los descuentos aplicados
-- =============================================
CREATE FUNCTION [dbo].[getPrecioConDcto] 
(
	@articulo char(10),
	@lista char(10)
)
RETURNS numeric(16,6)
AS
BEGIN
	--Variables
	DECLARE 
		@porcentaje _importe,
		@signo _importe,
		@precio _importe
	
	--Resultado a retornar
	DECLARE @Result numeric(16,6)
	
	--Declara un cursor con los descuentos a aplicar
	DECLARE dctos_cursor CURSOR FAST_FORWARD FOR
		SELECT porcentaje, signo, precio
		FROM App_descuentos
		WHERE id_lista = @lista
			AND art_id = @articulo
		ORDER BY orden_aplica

	OPEN dctos_cursor

	--Recorre el cursor
	FETCH NEXT FROM dctos_cursor
		INTO @porcentaje, @signo, @precio
	SET @Result = @precio
	
	WHILE @@FETCH_STATUS = 0
	BEGIN
		--Aplica los descuentos al precio según el orden de aplicación definido
		IF @signo=-1	--Descuento
			SET @Result = @Result - (@Result * @porcentaje / 100)
		ELSE			--Recargo
			SET @Result = @Result + (@Result * @porcentaje / 100)
		
		--Siguiente registro
		FETCH NEXT FROM dctos_cursor
			INTO @porcentaje, @signo, @precio
	END
	
	--Cierra el cursor
	CLOSE dctos_cursor
	DEALLOCATE dctos_cursor
	
	--Retorna el precio del artículo con los descuentos aplicados
	RETURN @Result

END
GO
